# 单例设计模式
class Person(object):
    # __init__ 在给创建的新对象的属性赋值时,触发
    def __init__(self, name):
        print("__init__")
        self.name = name

    # 定义一个类属性
    instance = None

    @classmethod
    def __new__(cls, *args, **kwargs):
        print("__new__")
        # 如果类属性的instance == None 表示该类未创建过对象
        if cls.instance is None:
            # 若未创建过对象,将创建的对象赋值给类属性instance

            cls.instance = super().__new__(cls)
        return cls.instance


p = Person("小菲")
p1 = Person("菲小")
p2 = Person("小小菲")
print(id(p), id(p1), id(p2))
print(p == p1 == p2)
# __new__()当创建对象的时候,触发
# __init__() 当给创建的对象的属性赋值的时候触发.
